export function isFunction(func) {
    return (typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]')
}

export function snapToGrid(grid, pendingX, pendingY, scale = 1) {
    const x = Math.round((pendingX / scale) / grid[0]) * grid[0]
    const y = Math.round((pendingY / scale) / grid[1]) * grid[1]

    return [x, y]
}

export function getSize(el) {
    const {height, width} = el.getBoundingClientRect()
    return [
        parseInt(width),
        parseInt(height)
    ]
}

export function computeWidth(parentWidth, left, right) {
    return parentWidth - left - right
}

export function computeHeight(parentHeight, top, bottom) {
    return parentHeight - top - bottom
}

export function restrictToBounds(value, min, max) {
    if (min !== null && value < min) {
        return min
    }

    if (max !== null && max < value) {
        return max
    }

    return value
}
